# -*- coding:UTF-8 -*-
import pygame
class Actor(pygame.sprite.Sprite):
    '''
    基本角色
    '''
    def __init__(self, x, y , dir, name, w = 1, h = 1):
        '''
        角色初始化
        :param x: 角色的x坐标
        :param y: 角色的y坐标
        :param dir: 角色的运动方向 left right up down
        :param name: 角色的名字
        :param w: 宽度
        :param h: 高度
        '''
        pygame.sprite.Sprite.__init__(self)
        self.rect = pygame.Rect(x, y, w, h) #type:pygame.Rect

        self.curr_dir = dir #type:str
        self.path = None #type:str
        self.name = name #type:str
        self.x_vel = 0 #type:int
        self.y_vel = 0 #type:int
        self.image_pos = 0 #type:map
        self.curr_img_id = 0 #type:int

    def init_self(self):
        '''
        初始化角色信息，包括图片，位置
        :return:
        '''
        self.set_imgae_path()
        self.load_image()
        self.init_rect()

    def set_imgae_path(self):
        '''
        设置图片位置，子类必须重写
        :return:
        '''
        pass

    def update(self):
        '''
        角色状态更新
        :return:
        '''
        pass
    def action(self, keys, mouse):
        '''
        角色的操作活动
        :param keys:
        :param mouse:
        :return:
        '''
        pass

    def init_rect(self):
        '''
        初始化位置信息，派生类必须重写
        :return:
        '''
        pass

    def get_curr_rect(self):
        '''
        获取当前位置,根据方向
        :return:
        '''
        current_rect = self.image_pos[self.curr_dir][self.curr_img_id];
        self.rect = pygame.Rect(self.rect.x, self.rect.y, current_rect.width, current_rect.height)
        return  self.rect

    def load_image(self):
        '''
        加载角色图片
        :return:
        '''
        self.sprite_img = pygame.image.load(self.path).convert_alpha()

    def get_surface(self):
        '''
        获取自己的当前状态图片
        :return:
        '''
        current_rect = self.image_pos[self.curr_dir][self.curr_img_id];
        return self.sprite_img.subsurface(current_rect)

    def draw_self(self, surface):
        '''
        绘制自己
        :param surface:
        :return:
        '''
        draw_rect = self.get_curr_rect()
        # draw_rect = draw_rect.move(0,-2 * draw_rect.height)

        surface.blit(self.get_surface(), draw_rect)



